<!DOCTYPE html>
<html lang="zh-CN">
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  <title>Lua  读写卡客户端 | 在线编辑器</title> 
  <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
  <link href="./bootstrap/css/bootstrap.min.css" rel="stylesheet" /> 
 <body> 
 <div class="container" style="width:100%;height:100%; font-size:12px;">
	   <div class="row clearfix">
			<div class="col-md-12 column">
				<ul class="nav nav-tabs">
					<li>
						 <a href="./runcode.php">首页</a>
					</li>
					<li class="active">
						 <a href="./help.php">帮助</a>
					</li>
					<li>
						 <a href="./about.php">简介</a>
					</li>
				</ul>
				<div class="page-header">
					<h1>
						<small>本工具以Lua脚本的形式对CPU卡,M1卡就行读、写等各种操作.</small>
<small>						

</small>
					</h1>
					<?php
					
					?>
				</div>
			</div>
		</div>
<pre>	 
 相关指令:
 CONNECT(ip,port)               --连接读卡服务
 DISCONNECT()                   --断开连接

 G_SN()                         --获取卡物理号
 APDU(cmd,type)                 --APDU命令
 S_SFI(sfi,type)                --选择目录SFI
 S_AID(aid,type)                --选择目录AID
 R_BFile(name,offet,len,type)   --读二进制文件

 M1卡指令:
 R_Block(block,key,mode) 
 W_Block(block,wbuf,key,mode)   --参数mode,0，用keyA访问，1,用KeyB访问
 
 cmd:  CPU卡指令字符串(16进制形式的字符串)
 type: 0,psam卡 1,卡片
 例:
 ret,rcv = APDU("00A400023F00",0)      --选择卡片应用
 ret,rcv = APDU("00A400023F00",1)      --选择PSAM卡应用
 ret,rcv = S_SFI("\x3F\x00",0)
 ret,rcv = S_AID("MOT.INTERCITY01",0)  --选择卡片AID
 ret,rcv = R_BFile(0x15,0,0,0)         --读取卡片15文件
 
 G_SN()                           --获取物理卡号
 
 key = "A1A2A3A4A5"
 ret,rcv = R_Block(4,key,0)       --M1卡读第四块,使用KeyA:"A1A2A3A4A5"
 wbuf = "12121212121212121212121212121212"
 W_Block(4,wbuf,key,1)            --M1卡写第四块,使用KeyB,写入数据16个0x12
 
 ret:    返回码(数值格式)
 rev:    收到的数据(16进制字符串格式)
 
 DES加解密指令：
 DES加密：DES_Enc(str_inkey,str_indata),返回str_outdata
 DES解密：DES_Dec(str_inkey,str_indata),返回str_outdata
 
 3DES加密：DES_3Enc(str_inkey,str_indata),返回str_outdata
 3DES解密：DES_3Dec(str_inkey,str_indata),返回str_outdata
 算MAC: MathDesMac(str_indata,inlen,str_inkey,type),返回 ret,str_outdata
 
也可以做为通信调试， 
通信调试范例：
--this is a demo:
----------------------------------------------------
--通信服务地址
ip= "127.0.0.1"
--通信服务端口
port = 5050

--连接到通信前置服务
ret = CONNECT(ip,port)           --建立连接
-------------------------------------------  
--通讯报文规范是基于TCP/IP 通讯协议而设计，支持二进制字节流。采用统一的消息类型标识识别方式进行处理
--通信协议格式: MTI+STI+DBL+DATA
--签到报文 ,
MTI = 'B001'    --消息类型标识
STI = '52'      --请求类型标识
DBL = '1C'      --报文体长度
DATA = ''       --数据域

shanghu = '12345671' 
poscode = '12345672'
samcode = '12345673'
optcode = '12345674'

DATA = shanghu..poscode..samcode..optcode
DBL = string.format("%02x",string.len(DATA))
TX = MTI .. STI .. DBL .. DATA

ret,rcv = TxData(TX)      --调用接口TxData(str),实际会以16进制的字节流发送报文
print(rcv)

--黑名单下载
MTI = 'B004'
blackver = '00000000'
DATA = blackver .. poscode
DBL = string.format("%02x",string.len(DATA))
TX = MTI .. STI .. DBL .. DATA

ret,rcv = TxData(TX)           
print(rcv)

DISCONNECT()                          --断开连接
</pre>
</div>
</body>
</html>